package com.shadow.util;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class SpringApplication {

    public static void run() {
        // 实例化spring容器
        // AnnotationConfigWebApplicationContext configWebApplicationContext
        //         = new AnnotationConfigWebApplicationContext();
        // configWebApplicationContext.register(App.class);

        /**
         * 手动new DispatcherServlet
         * new DispatcherServlet() 方法里面就会调用 spring 的 refresh 方法，代码有点深
         */
        // DispatcherServlet servlet = new DispatcherServlet(configWebApplicationContext);

        // 实例化tomcat
        Tomcat tomcat = new Tomcat();
        // 配置tomcat
        tomcat.setPort(9090);

        /**
         * 让 tomcat 把整个项目都当作 web 项目来处理
         * 这样就提供 tomcat 调用 resource 下面的 spi 扩展文件
         */
        tomcat.addWebapp("/", "");

        // Context context = tomcat.addContext("/", "");
        // 添加 Servlet
        // Wrapper d = Tomcat.addServlet(context, "d", servlet);
        // d.addMapping("*.do");
        //
        // // 当 tomcat 容器启动的时候就会初始化  Servlet 容器
        // d.setLoadOnStartup(1);

        // 启动tomcat
        try {
            tomcat.start();
        } catch (LifecycleException e) {
            e.printStackTrace();
        }
        // 阻塞 以保持 tomcat 一直在运行中
        tomcat.getServer().await();
    }
}
